/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Principals.Constantes;
import Model.Producto;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.List;
import org.hibernate.Query;

/**
 *
 * @author Paola
 */
public class ProductoDAO {

    public static Producto registrarProducto(Producto nuevo_producto) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.save(nuevo_producto);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "producto", nuevo_producto.getIdProducto() + "->" + nuevo_producto.getNombre(), Constantes.LOG_INSERT);
        }
        return nuevo_producto;
    }

    public static void modificarProducto(Producto nuevo_producto) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.update(nuevo_producto);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "producto", nuevo_producto.getIdProducto() + "->" + nuevo_producto.getNombre(), Constantes.LOG_UPDATE);
        }
    }

    public static List<Producto> buscarProducto(String nombre) {
        String q = "from Producto where stock > 0 ";
        int cont = 0;
        if (nombre != null) {
            q += " and lower(nombre) LIKE lower(:nombre)";
            cont++;
        }

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        if (nombre != null) {
            query.setParameter("nombre", "%" + nombre + "%");
        }
        Main.usrSesion.session.getTransaction().commit();

        return query.list();
    }
    public static void disminuirStock(Producto producto) {
               
        try {
            producto.setStock(producto.getStock()-1);
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.update(producto);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "producto", producto.getIdProducto() + "->" + producto.getNombre(), Constantes.LOG_UPDATE);
        }
    }
    
    public static Producto cargarProducto(int idProducto) {
        String q = "from Producto where id_producto = :id";

        Main.usrSesion.session.beginTransaction();

        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("id", idProducto);
        Producto p = (Producto) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();

        return p;
    }
}
